/**函数柯里化
 * @param param 要进行加法的函数
 * @returns 仍然返回一个函数，可以继续加法，也可以调用.valueOf获取结果
 * @example add(1, 2)(3)(4, 5).valueOf() //15
 */
const add = (...param: number[]) => {
    const nums: number[] = param
    const fn = function (...param: number[]) {
        nums.push(...param)
        return add(...nums) //这里需要拼接好所有历史参数，传递给下一个人 
    }
    fn.valueOf = () => { //给当前函数实例添加一个属性
        return nums.reduce((pre, cur) => pre + cur)
    }
    return fn
}
export default add